package com.masita.ventanas;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class TablaDatos extends JTable{

	private DefaultTableModel modelo;
	private int ordenarColumna = -1;
	
	public TablaDatos(){
		super();
	}
	
	public void cargarColumnas(Vector col){

		// Crea el modelo y establece que las celdas no sean editables
		this.modelo = new DefaultTableModel(){
			public boolean isCellEditable(int arg0, int arg1) {
				return false;
			}			
		};
		
		this.setModel(this.modelo);

		for( int i=0; i<col.size(); i++)
			this.modelo.addColumn(col.elementAt(i));
		
		this.getTableHeader().addMouseListener(new MouseListener(){
			public void mouseEntered(MouseEvent e){}
			public void mouseExited(MouseEvent e){}
			public void mouseReleased(MouseEvent e){}
			public void mouseClicked(MouseEvent e){}
			public void mousePressed(MouseEvent e){
				int index = columnModel.getColumnIndexAtX(e.getPoint().x);
				ordenarColumna = index;
			}
		});
		this.getTableHeader().setReorderingAllowed(false);
	}

	public void cargarColumnas(Vector col, int w){

		this.modelo = new DefaultTableModel();
		this.setModel(this.modelo);

		for( int i=0; i<col.size(); i++)
			this.modelo.addColumn(col.elementAt(i));

		for( int i=0; i<this.getColumnCount(); i++){
			this.getTableHeader().getColumnModel().getColumn(i).setPreferredWidth(w);
			this.setHeaderCelda(i);
		}
		
		this.getTableHeader().setReorderingAllowed(false);
	}
	
	private void actualizarConsulta(){
		int i = 0;		
	}
	
	public boolean cargarDatos(Vector datos){
		if( this.modelo != null ){

			for(int i=(modelo.getRowCount()-1); i>-1; i--)
				modelo.removeRow(i);

			for(int i=0; i<datos.size(); i++)
				this.modelo.addRow((Vector)datos.elementAt(i));
			return true;
		}
		return false;
	}
	
	public int getFilaSeleccionada(){
		return this.getSelectedRow();
	}

	public Vector getFila(int pos){
		return ((Vector)this.modelo.getDataVector().elementAt(pos));
	}
	
	public Vector getColumnas(){
		Vector col = new Vector();
		for( int i=0; i<this.getColumnCount(); i++){
			col.addElement(this.getColumnName(i));
		}
		return col;
	}
	
	public void setFilaSeleccionada(int i){
		if( i < this.getRowCount() && i > -1 ){
			this.setRowSelectionInterval(i,i);
			this.changeSelection(i,0,true,true);
		}
		else
			this.getSelectionModel().clearSelection();
	}
	
	// METODO SETEAR EL ANCHO DE LAS COLUMNAS *************
	public void setWitdhColumna(int[] v, boolean r){
		
		for( int i=0; i<this.getColumnCount(); i++)
			this.getColumnModel().getColumn(i).setPreferredWidth(v[i]);

		this.getTableHeader().setResizingAllowed(r);
	}
	
	// METODO BUSCAR UN STRING EN LA COLUMNA **************
	public int buscarFila(String valor, int col, int fila){
	
		if( valor.length() == 0 )
			return -1;
			
		for( int i=fila; i<this.modelo.getRowCount(); i++ ){
			String s = ((Vector)this.modelo.getDataVector().elementAt(i)).elementAt(col).toString().toUpperCase();
			if( s.startsWith(valor.toUpperCase()) )
				return i;
		}
		return -1;
	}
	
	// METODO CARGAR EL EDITOR DE LAS CELDAS **************
	public void setColumnasEnteras(){
		for(int i=0; i<this.getColumnCount(); i++)
			this.setCeldaEntero(i);
	}
	
	public void setCeldaEntero(int col){
		javax.swing.JTextField t = com.masita.util.Utilidad.getCodigoTextField(8);
		t.setHorizontalAlignment(javax.swing.JTextField.CENTER);
		this.getColumnModel().getColumn(col).setCellEditor(new DefaultCellEditor(t));
	}

	public void setHeaderCelda(int col){
		DefaultTableCellRenderer t = new DefaultTableCellRenderer();
		t.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
		t.setBackground(new java.awt.Color(224,224,220));
		t.setOpaque(true);
		this.getColumnModel().getColumn(col).setHeaderRenderer(t);
	}

	public void eliminarFila(int i){
		if( i < 0 || i >= modelo.getRowCount() )
			return;
		
		modelo.removeRow(i);
	}
	// METODO PARA ORDENAR LAS FILAS **********************
/*	
	private boolean ordenarFilas(int col){
		
		if( this.getRowCount() == 0 ) return false;
		
		Vector viejo = modelo.getDataVector();
		Vector nuevo = new Vector();
				
		for( int i=0; i<viejo.size(); i++){
			String v = ((Vector)viejo.elementAt(i)).elementAt(col).toString();
			
			boolean cargo = false;
			for( int j=0; j<nuevo.size(); j++){
				String n = ((Vector)nuevo.elementAt(j)).elementAt(col).toString();
				if( n.compareTo(v) < 0 ){
					nuevo.insertElementAt(viejo.elementAt(i),j);
					j = nuevo.size();
					cargo = true;
				}					
			}
			if( !cargo )
				nuevo.addElement(viejo.elementAt(i));
		}
		
		this.cargarDatos(nuevo);
		
		return true;
	}
	
	public void reemplazarFila(Vector v, int fila){
		
		if( modelo.getRowCount() > fila && fila > -1){
			modelo.removeRow(fila);
			modelo.insertRow(fila,v);
		}
	}
*/
}
